In a typical multi-processor computing system, a number of caching agents are interconnected via a network. A “caching agent” is a unit containing one or more processing cores (e.g., one or more units of logic circuitry that executes program code) that may have associated cache(s) for its respective processing cores. These caching agents may share a same system memory. In order to access the system memory, a caching agent issues a memory request to a home agent (or home node) of a memory controller controlling the system memory. The “home agent” of the memory controller is responsible for handling the semantics of the transactions that the memory controller deals with over a network connecting the caching agents with the home agent.
Of interest in the multi-processor computing system are the transactions that occur over the network between the caching agents and the home agent (e.g., to effect coherent caching and shared access to the system memory for data and/or instructions). The cornerstone of a source snoop broadcast protocol that does not use negative acknowledgement is the pre-allocation of tracker resources (or credits) at the home agent. The tracker resources may be a multiple-entry structure that is used to keep “track” of the state of these transactions. Each entry may represent a tracker. According to this protocol, pre-allocation requires that a caching agent is allocated a tracker prior to sending a memory access request to the home agent. Static partitioning of the trackers divides the trackers into groups. Each group is allocated exclusively to a particular caching agent. One of the disadvantages of static partitioning is less efficient use of these trackers caused by less flexible resource allocation. For example, some caching agents may need to issue fewer memory access requests than other caching agents. Thus, some of the trackers pre-allocated to the former caching agents may stay unused while the later caching agents are really short of trackers for issuing new memory access requests.